package main

import (
	"fmt"
	"go_code/day15/database"
)

// 演员模型类
type Actor struct {
	Id    uint
	Aname string `gorm:"size:20"`
	Roles []Role `gorm:"many2many:actor_roles"` // 指定两者之间的关联是多对多
}

func (a Actor) TableName() string {
	return "actor"
}

// 角色模型类
type Role struct {
	Id     uint
	Rname  string  `gorm:"size:20"`
	Actors []Actor `gorm:"many2many:actor_roles"`
}

func (a Role) TableName() string {
	return "role"
}
func main() {
	db := database.DB()
	db.AutoMigrate(&Actor{}, &Role{})
	// 插入数据
	// actor := []Actor{
	// 	{Aname: "郑少秋"},
	// 	{Aname: "张铁林"},
	// 	{Aname: "张国立"},
	// }
	// db.Create(&actor)
	// role := []Role{
	// 	{Rname: "康熙"},
	// 	{Rname: "雍正"},
	// 	{Rname: "乾隆"},
	// }
	// db.Create(&role)
	// a1 := Actor{Aname: "胡歌"}
	// r1 := Role{Rname: "明台"}

	// db.Create(&a1)
	// db.Create(&r1)
	// 插入演员的时候，添加关联的角色
	// db.Model(&Actor{}).Create(&Actor{
	// 	Aname: "古天乐",
	// 	Roles: []Role{
	// 		{Id: 1},  // 角色的ID
	// 		{Id: 3},
	// 	},
	// })

	// db.Model(&Role{}).Create(&Role{
	// 	Rname: "孙悟空",
	// 	Actors: []Actor{
	// 		{Id: 1},
	// 		{Id: 2},
	// 		{Id: 4},
	// 	},
	// })

	// 查询出演员
	// var actor Actor
	// db.Where("id = ?", 2).First(&actor)
	// // 查询出角色
	// var role Role
	// db.Where("id = ?", 3).First(&role)
	// // 建立关联
	// // 给当前查询到的演员关联角色，添加查询到的角色
	// db.Model(&actor).Association("Roles").Append(&role)

	// 查询数据
	// 查询出所有的演员及其对应的角色
	// var actor []Actor
	// db.Preload("Roles").Find(&actor)
	// // fmt.Println(actor)
	// // 显示出所有的演员及其对应的角色
	// for _, value := range actor {
	// 	fmt.Println("演员：", value.Aname)
	// 	for _, v := range value.Roles {
	// 		fmt.Println("   角色：", v.Rname)
	// 	}
	// }
	// 查询出所有的角色以及对应的演员
	// var role []Role
	// db.Preload("Actors").Find(&role)
	// // fmt.Println(role)
	// for _, value := range role {
	// 	fmt.Println("角色：", value.Rname)
	// 	for _, v := range value.Actors {
	// 		fmt.Println("---演员：", v.Aname)
	// 	}
	// }

	var role Role
	db.Preload("Actors").Where("id = 3").First(&role)
	fmt.Println(role)

}
